﻿//----------------------------------------------------------------
// Desc: INI文件写入
// Edit: ShowLong, http://blog.csdn.net/showlong
//
// Date Created: 2011-05-06
//
// Update Date : 
//
// Copyright (c) Fuel4D (http://www.fuel4d.com), All rights reserved.
//
// 使用方法：
//   IFINIW* iniw = FNewINIW(FNEW_INFO, filename);
//   iniw->WriteMuster(szTypename.c_str());
//   iniw->WriteBool(_FT("window"), true);
//   iniw->WriteInt(_FT("width"), 600);
//   iniw->WriteInt(_FT("width"), 480);
//   FDel(iniw);
//----------------------------------------------------------------
#pragma once


class IFINIW : public IFMemObject
{
public:
    enum CONST_DATA
    {
        eMaxString = 256,   // 单行最大字符数量
    };

protected:
    explicit IFINIW()
    {}

public:
    // 写入集合名
    // .name 集合名
    FINLINE void WriteMuster (const NCHAR* name);
    virtual void WriteMusterW(const WCHAR* name) = 0;
    FINLINE void WriteMusterA(const ACHAR* name);
    // 写入字符串
    // .name 键名
    // .v 键值
    FINLINE void WriteString (const NCHAR* name, const NCHAR* v);
    virtual void WriteStringW(const WCHAR* name, const WCHAR* v) = 0;
    FINLINE void WriteStringA(const ACHAR* name, const ACHAR* v);
    // 写入bool值
    // .name 键名
    // .v 键值
    FINLINE void WriteBool (const NCHAR* name, bool v);
    virtual void WriteBoolW(const WCHAR* name, bool v) = 0;
    FINLINE void WriteBoolA(const ACHAR* name, bool v);
    // 写入int值
    // .name 键名
    // .v 键值
    FINLINE void WriteInt (const NCHAR* name, int v);
    virtual void WriteIntW(const WCHAR* name, int v) = 0;
    FINLINE void WriteIntA(const ACHAR* name, int v);
    // 写入float值
    // .name 键名
    // .v 键值
    FINLINE void WriteFloat (const NCHAR* name, float v);
    virtual void WriteFloatW(const WCHAR* name, float v) = 0;
    FINLINE void WriteFloatA(const ACHAR* name, float v);
    // 写入颜色值
    // .name 键名
    // .color 键值
    FINLINE void WriteColor (const NCHAR* name, DWORD color);
    virtual void WriteColorW(const WCHAR* name, DWORD color) = 0;
    FINLINE void WriteColorA(const ACHAR* name, DWORD color);
    // 写入RECT
    // .name 键名
    // .rc 键值
    FINLINE void WriteRect (const NCHAR* name, RECT& rc);
    virtual void WriteRectW(const WCHAR* name, RECT& rc) = 0;
    FINLINE void WriteRectA(const ACHAR* name, RECT& rc);
    // 写入FRect
    // .name 键名
    // .rc 键值
    FINLINE void WriteFRect (const NCHAR* name, FRect& rc);
    virtual void WriteFRectW(const WCHAR* name, FRect& rc) = 0;
    FINLINE void WriteFRectA(const ACHAR* name, FRect& rc);
    // 写入回车换行
    virtual void WriteEnter() = 0;
    // 写入注释
    // .remark 注释内容
    // 注意：remark内容不可以包含\r\n之类的特殊符
    FINLINE void WriteRemark (const NCHAR* remark);
    virtual void WriteRemarkW(const WCHAR* remark) = 0;
    FINLINE void WriteRemarkA(const ACHAR* remark);
};

#include "Core/IFDoc_INIW_inl.h"

extern FAPI IFINIW* FNewINIWW(FNEW_FUNC_API, const WCHAR * filename);
extern FAPI IFINIW* FNewINIWA(FNEW_FUNC_API, const ACHAR * filename);

#ifdef UNICODE
#define FNewINIW            FNewINIWW
#else
#define FNewINIW            FNewINIWA
#endif

#if FUEL_OS_WINDOWS
#define FFNewINIW           FNewINIWW
#else
#define FFNewINIW           FNewINIWA
#endif